GraphQL একটি শক্তিশালী এবং flexibel API query language যা REST API এর তুলনায় অনেক বেশি কার্যকরী এবং উন্নত। GraphQL আপনাকে আপনার ডেটা কীভাবে সংগ্রহ করা হবে তা নির্দিষ্ট করতে দেয় এবং একাধিক রিকোয়েস্ট একত্রে পাঠানো সম্ভব করে, যা কার্যকারিতা উন্নত করে।
Meteor এ GraphQL ব্যবহার করা জন্য আপনি Apollo এবং GraphQL এর প্যাকেজগুলি ব্যবহার করতে পারেন। Apollo Server ব্যবহার করে আপনি সহজেই GraphQL এর জন্য queries এবং mutations তৈরি করতে পারেন।
GraphQL Query এবং Mutations কী?
- Query:
Query ব্যবহার করে আপনি ডেটা রিট্রিভ (fetch) করতে পারেন। এটি মূলত GET রিকোয়েস্টের মতো কাজ করে। - Mutation:
Mutation ব্যবহার করে আপনি ডেটা পরিবর্তন করতে পারেন, যেমন ডেটা ইনসার্ট, আপডেট বা ডিলিট করা। এটি মূলত POST, PUT, DELETE রিকোয়েস্টের মতো কাজ করে। 
Meteor-এ GraphQL Query এবং Mutations ব্যবহার করা
প্রথমে GraphQL এবং Apollo প্যাকেজ ইনস্টল করা
Apollo Server এবং GraphQL প্যাকেজ ইনস্টল করা:
meteor add apollo meteor add graphql- Meteor-এ Apollo Server সেটআপ করা: Apollo Server Meteor-এ GraphQL সার্ভার চালু করতে সাহায্য করে।
 
এটা করতে হবে:
// /server/main.js
import { ApolloServer, gql } from 'apollo-server-meteor';
import { Tasks } from '/imports/api/tasks.js';
// GraphQL Schema: Queries and Mutations
const typeDefs = gql`
  type Task {
    _id: String
    text: String
    createdAt: String
  }
  type Query {
    tasks: [Task]
    task(_id: String): Task
  }
  type Mutation {
    addTask(text: String!): Task
    deleteTask(_id: String!): Boolean
  }
`;
// Resolvers: Query and Mutation Logic
const resolvers = {
  Query: {
    tasks() {
      return Tasks.find().fetch();  // Retrieve all tasks
    },
    task(_, { _id }) {
      return Tasks.findOne(_id);  // Retrieve a task by ID
    },
  },
  Mutation: {
    addTask(_, { text }) {
      const task = {
        text,
        createdAt: new Date(),
      };
      const taskId = Tasks.insert(task);
      return { _id: taskId, text, createdAt: task.createdAt };
    },
    deleteTask(_, { _id }) {
      return Tasks.remove({ _id });
    },
  },
};
// Setting up Apollo Server
const server = new ApolloServer({
  typeDefs,
  resolvers,
  subscriptions: false, // disable subscriptions for now
});
server.applyMiddleware({ app: Meteor });
এখানে, আমরা tasks এবং task নামক Queries এবং addTask ও deleteTask নামক Mutations তৈরি করেছি। আমাদের Tasks কোলেকশনের ওপর কাজ করছে।
GraphQL Query উদাহরণ
Query ব্যবহার করে আপনি ডেটা রিট্রিভ করতে পারেন, যেমন:
query {
  tasks {
    _id
    text
    createdAt
  }
}
এখানে, tasks নামক query ব্যবহার করে আপনি সমস্ত টাস্কের _id, text এবং createdAt এর মান পাবেন।
GraphQL Mutation উদাহরণ
Mutation ব্যবহার করে আপনি ডেটা ইনসার্ট বা আপডেট করতে পারেন, যেমন:
mutation {
  addTask(text: "Learn GraphQL with Meteor") {
    _id
    text
    createdAt
  }
}
এখানে, addTask Mutation ব্যবহার করা হয়েছে একটি নতুন টাস্ক যোগ করতে এবং তার সাথে _id, text, এবং createdAt ডেটা ফেরত পাবেন।
Meteor Client-Side এ GraphQL Query এবং Mutation ব্যবহার করা
Meteor-এ GraphQL Query এবং Mutation ক্লায়েন্ট সাইডে Apollo Client এর মাধ্যমে ব্যবহার করা হয়। Apollo Client আপনাকে GraphQL সার্ভারের সাথে যোগাযোগ করতে সহায়ক।
1. Apollo Client প্যাকেজ ইনস্টল করা
meteor add apollo-client
2. Client-Side Code (GraphQL Query এবং Mutation)
// /client/main.js
import { ApolloClient, InMemoryCache, gql } from '@apollo/client';
const client = new ApolloClient({
  uri: '/graphql',
  cache: new InMemoryCache(),
});
// Example: Query all tasks
client
  .query({
    query: gql`
      query {
        tasks {
          _id
          text
          createdAt
        }
      }
    `,
  })
  .then((result) => console.log(result.data.tasks));
// Example: Mutation to add a task
client
  .mutate({
    mutation: gql`
      mutation {
        addTask(text: "Learn GraphQL with Meteor") {
          _id
          text
          createdAt
        }
      }
    `,
  })
  .then((result) => console.log(result.data.addTask));
এখানে, প্রথমে একটি Query করা হয়েছে সমস্ত টাস্কের তথ্য পাওয়ার জন্য এবং তারপর একটি Mutation করা হয়েছে একটি নতুন টাস্ক ইনসার্ট করার জন্য।
Subscription (Optional)
আপনি যদি real-time data চান, তবে Subscription ব্যবহার করতে পারেন, যা সার্ভারের ডেটা পরিবর্তন হলে তা ক্লায়েন্টে তাত্ক্ষণিকভাবে আপডেট করবে।
// /server/main.js
const typeDefs = gql`
  type Subscription {
    taskAdded: Task
  }
  // Your other query and mutation typeDefs
`;
const resolvers = {
  Subscription: {
    taskAdded: {
      subscribe: () => pubsub.asyncIterator(['TASK_ADDED']),
    },
  },
  Mutation: {
    addTask(_, { text }) {
      const task = {
        text,
        createdAt: new Date(),
      };
      const taskId = Tasks.insert(task);
      pubsub.publish('TASK_ADDED', { taskAdded: task });
      return { _id: taskId, text, createdAt: task.createdAt };
    },
  },
};
এখানে, taskAdded নামক Subscription ব্যবহার করা হয়েছে। যখনই addTask মিউটেশন হবে, তখন taskAdded সাবস্ক্রাইবারদের কাছে পাঠানো হবে।
সারাংশ
Meteor-এ GraphQL Queries এবং Mutations খুবই সহজ এবং কার্যকরীভাবে ব্যবহৃত হতে পারে Apollo Server এবং Apollo Client প্যাকেজের মাধ্যমে। Queries ব্যবহার করে ডেটা রিট্রিভ এবং Mutations ব্যবহার করে ডেটা ইনসার্ট বা আপডেট করা হয়। আপনি GraphQL সার্ভারের সাথে ক্লায়েন্ট সাইডে Apollo Client এর মাধ্যমে যোগাযোগ করতে পারেন। আপনি Subscriptions ব্যবহার করে রিয়েল-টাইম ডেটা আপডেটও করতে পারেন। GraphQL আপনাকে ডেটা রিট্রিভ করার আরো নির্দিষ্ট এবং কার্যকরী উপায় প্রদান করে, যা REST API এর তুলনায় অনেক বেশি কার্যকরী হতে পারে।
Read more